ZGlmZiAtLWdpdCBhL2NwdS9pMzg2L2V4Y2VwdGlvbnMuYyBiL2NwdS9pMzg2L2V4Y2VwdGlvbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzNkNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2kzODYvZXhjZXB0aW9ucy5jCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiwgZGFuaWVsQG9taWNyb24uc2UuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9pbnRlcnJ1cHQuaD4KKworYXNtICgiLmdsb2JsIGV4cF9yZXR1cm5cbiIKKyAgICAgImV4cF9yZXR1cm46XG4iCisgICAgICIgICAgIGFkZGwgICQxMiwgJWVzcFxuIgorICAgICAiICAgICBwb3AgICAlZXNwXG4iCisgICAgICIgICAgIHBvcGFcbiIKKyAgICAgIiAgICAgaXJldFxuIik7CisKK2NoYXIgZXhjZXB0aW9uX3N0YWNrWzQwOTZdOworCisvKgorICogRm9yIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGVhY2ggZXhjZXB0aW9uLCByZWZlciB0bzoKKyAqIEludGVsriA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJlcyBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwKKyAqIFZvbHVtZSAxOiBCYXNpYyBBcmNoaXRlY3R1cmUKKyAqIE9yZGVyIE51bWJlcjogMjUzNjY1LTAyOVVTLCBOb3ZlbWJlciAyMDA4CisgKiBUYWJsZSA2LTEuIEV4Y2VwdGlvbnMgYW5kIEludGVycnVwdHMKKyAqLworREVDTEFSRV9FWENFUFRJT04oMCwgZGl2aWRlX2Vycm9yX2VudHJ5KTsKK0RFQ0xBUkVfRVhDRVBUSU9OKDEsIGRlYnVnX2VudHJ5KTsKK0RFQ0xBUkVfRVhDRVBUSU9OKDIsIG5taV9pbnRlcnJ1cHRfZW50cnkpOworREVDTEFSRV9FWENFUFRJT04oMywgYnJlYWtwb2ludF9lbnRyeSk7CitERUNMQVJFX0VYQ0VQVElPTig0LCBvdmVyZmxvd19lbnRyeSk7CitERUNMQVJFX0VYQ0VQVElPTig1LCBib3VuZF9yYW5nZV9leGNlZWRlZF9lbnRyeSk7CitERUNMQVJFX0VYQ0VQVElPTig2LCBpbnZhbGlkX29wY29kZV9lbnRyeSk7CitERUNMQVJFX0VYQ0VQVElPTig3LCBkZXZpY2Vfbm90X2F2YWlsYWJsZV9lbnRyeSk7CitERUNMQVJFX0VYQ0VQVElPTig4LCBkb3VibGVfZmF1bHRfZW50cnkpOworREVDTEFSRV9FWENFUFRJT04oOSwgY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuX2VudHJ5KTsKK0RFQ0xBUkVfRVhDRVBUSU9OKDEwLCBpbnZhbGlkX3Rzc19lbnRyeSk7CitERUNMQVJFX0VYQ0VQVElPTigxMSwgc2VnbWVudF9ub3RfcHJlc2VudF9lbnRyeSk7CitERUNMQVJFX0VYQ0VQVElPTigxMiwgc3RhY2tfc2VnbWVudF9mYXVsdF9lbnRyeSk7CitERUNMQVJFX0VYQ0VQVElPTigxMywgZ2VuZXJhbF9wcm90ZWN0aW9uX2VudHJ5KTsKK0RFQ0xBUkVfRVhDRVBUSU9OKDE0LCBwYWdlX2ZhdWx0X2VudHJ5KTsKK0RFQ0xBUkVfRVhDRVBUSU9OKDE1LCByZXNlcnZlZF9leGNlcHRpb25fZW50cnkpOworREVDTEFSRV9FWENFUFRJT04oMTYsIGZsb2F0aW5nX3BvaW50X2Vycm9yX2VudHJ5KTsKK0RFQ0xBUkVfRVhDRVBUSU9OKDE3LCBhbGlnbm1lbnRfY2hlY2tfZW50cnkpOworREVDTEFSRV9FWENFUFRJT04oMTgsIG1hY2hpbmVfY2hlY2tfZW50cnkpOworREVDTEFSRV9FWENFUFRJT04oMTksIHNpbWRfZmxvYXRpbmdfcG9pbnRfZXhjZXB0aW9uX2VudHJ5KTsKK0RFQ0xBUkVfRVhDRVBUSU9OKDIwLCByZXNlcnZlZF9leGNlcHRpb25fZW50cnkpOworREVDTEFSRV9FWENFUFRJT04oMjEsIHJlc2VydmVkX2V4Y2VwdGlvbl9lbnRyeSk7CitERUNMQVJFX0VYQ0VQVElPTigyMiwgcmVzZXJ2ZWRfZXhjZXB0aW9uX2VudHJ5KTsKK0RFQ0xBUkVfRVhDRVBUSU9OKDIzLCByZXNlcnZlZF9leGNlcHRpb25fZW50cnkpOworREVDTEFSRV9FWENFUFRJT04oMjQsIHJlc2VydmVkX2V4Y2VwdGlvbl9lbnRyeSk7CitERUNMQVJFX0VYQ0VQVElPTigyNSwgcmVzZXJ2ZWRfZXhjZXB0aW9uX2VudHJ5KTsKK0RFQ0xBUkVfRVhDRVBUSU9OKDI2LCByZXNlcnZlZF9leGNlcHRpb25fZW50cnkpOworREVDTEFSRV9FWENFUFRJT04oMjcsIHJlc2VydmVkX2V4Y2VwdGlvbl9lbnRyeSk7CitERUNMQVJFX0VYQ0VQVElPTigyOCwgcmVzZXJ2ZWRfZXhjZXB0aW9uX2VudHJ5KTsKK0RFQ0xBUkVfRVhDRVBUSU9OKDI5LCByZXNlcnZlZF9leGNlcHRpb25fZW50cnkpOworREVDTEFSRV9FWENFUFRJT04oMzAsIHJlc2VydmVkX2V4Y2VwdGlvbl9lbnRyeSk7CitERUNMQVJFX0VYQ0VQVElPTigzMSwgcmVzZXJ2ZWRfZXhjZXB0aW9uX2VudHJ5KTsKKworX19pc3JfXyByZXNlcnZlZF9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCit7CisJcHJpbnRmKCJSZXNlcnZlZCBFeGNlcHRpb24gJWQgYXQgJTA0eDolMDh4XG4iLCBjYXVzZSwgc2VnLCBpcCk7Cit9CisKK19faXNyX18gZGl2aWRlX2Vycm9yX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQoreworCXByaW50ZigiRGl2aWRlIEVycm9yIChEaXZpc2lvbiBieSB6ZXJvKSBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworCXdoaWxlKDEpOworfQorCitfX2lzcl9fIGRlYnVnX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQoreworCXByaW50ZigiRGVidWcgSW50ZXJydXB0IChTaW5nbGUgc3RlcCkgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKK30KKworX19pc3JfXyBubWlfaW50ZXJydXB0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQoreworCXByaW50ZigiTk1JIEludGVycnVwdCBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworfQorCitfX2lzcl9fIGJyZWFrcG9pbnRfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCit7CisJcHJpbnRmKCJCcmVha3BvaW50IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7Cit9CisKK19faXNyX18gb3ZlcmZsb3dfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCit7CisJcHJpbnRmKCJPdmVyZmxvdyBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworCXdoaWxlKDEpOworfQorCitfX2lzcl9fIGJvdW5kX3JhbmdlX2V4Y2VlZGVkX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQoreworCXByaW50ZigiQk9VTkQgUmFuZ2UgRXhjZWVkZWQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKKwl3aGlsZSgxKTsKK30KKworX19pc3JfXyBpbnZhbGlkX29wY29kZV9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKK3sKKwlwcmludGYoIkludmFsaWQgT3Bjb2RlIChVbkRlZmluZWQgT3Bjb2RlKSBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworCXdoaWxlKDEpOworfQorCitfX2lzcl9fIGRldmljZV9ub3RfYXZhaWxhYmxlX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQoreworCXByaW50ZigiRGV2aWNlIE5vdCBBdmFpbGFibGUgKE5vIE1hdGggQ29wcm9jZXNzb3IpIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJd2hpbGUoMSk7Cit9CisKK19faXNyX18gZG91YmxlX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQoreworCXByaW50ZigiRG91YmxlIGZhdWx0IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJd2hpbGUoMSk7Cit9CisKK19faXNyX18gY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQoreworCXByaW50ZigiQ28tcHJvY2Vzc29yIHNlZ21lbnQgb3ZlcnJ1biBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworCXdoaWxlKDEpOworfQorCitfX2lzcl9fIGludmFsaWRfdHNzX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQoreworCXByaW50ZigiSW52YWxpZCBUU1MgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKK30KKworX19pc3JfXyBzZWdtZW50X25vdF9wcmVzZW50X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQoreworCXByaW50ZigiU2VnbWVudCBOb3QgUHJlc2VudCBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworCXdoaWxlKDEpOworfQorCitfX2lzcl9fIHN0YWNrX3NlZ21lbnRfZmF1bHRfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCit7CisJcHJpbnRmKCJTdGFjayBTZWdtZW50IEZhdWx0IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJd2hpbGUoMSk7Cit9CisKK19faXNyX18gZ2VuZXJhbF9wcm90ZWN0aW9uX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQoreworCXByaW50ZigiR2VuZXJhbCBQcm90ZWN0aW9uIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7Cit9CisKK19faXNyX18gcGFnZV9mYXVsdF9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKK3sKKwlwcmludGYoIlBhZ2UgZmF1bHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKKwl3aGlsZSgxKTsKK30KKworX19pc3JfXyBmbG9hdGluZ19wb2ludF9lcnJvcl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKK3sKKwlwcmludGYoIkZsb2F0aW5nLVBvaW50IEVycm9yIChNYXRoIEZhdWx0KSBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworfQorCitfX2lzcl9fIGFsaWdubWVudF9jaGVja19lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKK3sKKwlwcmludGYoIkFsaWdubWVudCBjaGVjayBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworfQorCitfX2lzcl9fIG1hY2hpbmVfY2hlY2tfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCit7CisJcHJpbnRmKCJNYWNoaW5lIENoZWNrIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7Cit9CisKK19faXNyX18gc2ltZF9mbG9hdGluZ19wb2ludF9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCit7CisJcHJpbnRmKCJTSU1EIEZsb2F0aW5nLVBvaW50IEV4Y2VwdGlvbiBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworfQorCitpbnQgY3B1X2luaXRfZXhjZXB0aW9ucyh2b2lkKQoreworCS8qIEp1c3QgaW4gY2FzZS4uLiAqLworCWRpc2FibGVfaW50ZXJydXB0cygpOworCisJLyogU2V0dXAgZXhjZXB0aW9ucyAqLworCXNldF92ZWN0b3IoMHgwMCwgZXhwXzApOworCXNldF92ZWN0b3IoMHgwMSwgZXhwXzEpOworCXNldF92ZWN0b3IoMHgwMiwgZXhwXzIpOworCXNldF92ZWN0b3IoMHgwMywgZXhwXzMpOworCXNldF92ZWN0b3IoMHgwNCwgZXhwXzQpOworCXNldF92ZWN0b3IoMHgwNSwgZXhwXzUpOworCXNldF92ZWN0b3IoMHgwNiwgZXhwXzYpOworCXNldF92ZWN0b3IoMHgwNywgZXhwXzcpOworCXNldF92ZWN0b3IoMHgwOCwgZXhwXzgpOworCXNldF92ZWN0b3IoMHgwOSwgZXhwXzkpOworCXNldF92ZWN0b3IoMHgwYSwgZXhwXzEwKTsKKwlzZXRfdmVjdG9yKDB4MGIsIGV4cF8xMSk7CisJc2V0X3ZlY3RvcigweDBjLCBleHBfMTIpOworCXNldF92ZWN0b3IoMHgwZCwgZXhwXzEzKTsKKwlzZXRfdmVjdG9yKDB4MGUsIGV4cF8xNCk7CisJc2V0X3ZlY3RvcigweDBmLCBleHBfMTUpOworCXNldF92ZWN0b3IoMHgxMCwgZXhwXzE2KTsKKwlzZXRfdmVjdG9yKDB4MTEsIGV4cF8xNyk7CisJc2V0X3ZlY3RvcigweDEyLCBleHBfMTgpOworCXNldF92ZWN0b3IoMHgxMywgZXhwXzE5KTsKKwlzZXRfdmVjdG9yKDB4MTQsIGV4cF8yMCk7CisJc2V0X3ZlY3RvcigweDE1LCBleHBfMjEpOworCXNldF92ZWN0b3IoMHgxNiwgZXhwXzIyKTsKKwlzZXRfdmVjdG9yKDB4MTcsIGV4cF8yMyk7CisJc2V0X3ZlY3RvcigweDE4LCBleHBfMjQpOworCXNldF92ZWN0b3IoMHgxOSwgZXhwXzI1KTsKKwlzZXRfdmVjdG9yKDB4MWEsIGV4cF8yNik7CisJc2V0X3ZlY3RvcigweDFiLCBleHBfMjcpOworCXNldF92ZWN0b3IoMHgxYywgZXhwXzI4KTsKKwlzZXRfdmVjdG9yKDB4MWQsIGV4cF8yOSk7CisJc2V0X3ZlY3RvcigweDFlLCBleHBfMzApOworCXNldF92ZWN0b3IoMHgxZiwgZXhwXzMxKTsKKworCS8qIEl0IGlzIG5vdyBzYWZlIHRvIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJZW5hYmxlX2ludGVycnVwdHMoKTsKKworCXJldHVybiAwOworfQo=